﻿using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Load += MainForm_Load; // 窗体加载时调用 MainForm_Load 方法
            treeView1.BeforeExpand += treeView1_BeforeExpand; // 绑定树形视图展开事件
            treeView1.AfterSelect += treeView1_AfterSelect; // 绑定选择事件
            listView1.DoubleClick += listView1_DoubleClick; // 绑定列表视图双击事件
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            // 加载 C: 盘根目录到树形视图
            TreeNode rootNode = new TreeNode("C:") { Tag = "C:\\" }; // 创建根节点
            treeView1.Nodes.Add(rootNode); // 将根节点添加到树形视图
            rootNode.Nodes.Add(new TreeNode()); // 添加空节点以便后续展开
            rootNode.Expand(); // 默认展开根节点
        }

        private void LoadDirectories(TreeNode node)
        {
            try
            {
                string path = (string)node.Tag; // 获取节点的路径
                string[] directories = Directory.GetDirectories(path); // 获取该路径下的所有子目录

                foreach (string directory in directories)
                {
                    TreeNode subNode = new TreeNode(Path.GetFileName(directory)) { Tag = directory }; // 创建子节点
                    subNode.Nodes.Add(new TreeNode()); // 添加空子节点以便后续展开
                    node.Nodes.Add(subNode); // 添加子节点到父节点
                }
            }
            catch (UnauthorizedAccessException)
            {
                MessageBox.Show("访问被拒绝: " + node.Tag); // 访问被拒绝的错误处理
            }
            catch (Exception ex)
            {
                MessageBox.Show("加载目录时发生错误: " + ex.Message); // 其他错误处理
            }
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            string path = (string)e.Node.Tag; // 获取选中节点的路径
            LoadFilesAndDirectories(path); // 加载文件和子目录
        }

        private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            // 如果该节点没有子节点，则加载其目录
            if (e.Node.Nodes.Count == 1 && e.Node.Nodes[0].Text == "")
            {
                e.Node.Nodes.Clear(); // 清除空节点
                LoadDirectories(e.Node); // 加载实际目录
            }
        }

        private void LoadFilesAndDirectories(string path)
        {
            try
            {
                listView1.Items.Clear(); // 清空列表视图
                string[] directories = Directory.GetDirectories(path); // 获取子目录
                string[] files = Directory.GetFiles(path); // 获取文件

                // 加载子目录到列表视图
                foreach (string directory in directories)
                {
                    ListViewItem item = new ListViewItem(Path.GetFileName(directory)) // 文件夹名称
                    {
                        Tag = directory // 设置项的路径
                    };
                    item.SubItems.Add("Folder"); // 类型信息
                    listView1.Items.Add(item); // 添加到列表视图
                }

                // 加载文件到列表视图
                foreach (string file in files)
                {
                    string fileName = Path.GetFileNameWithoutExtension(file); // 文件名（不包含扩展名）
                    string fileExtension = Path.GetExtension(file); // 文件扩展名

                    ListViewItem item = new ListViewItem(fileName) // 文件名
                    {
                        Tag = file // 设置项的路径
                    };
                    item.SubItems.Add(fileExtension); // 文件扩展名
                    listView1.Items.Add(item); // 添加到列表视图
                }

                // 设置列宽自适应
                listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error loading files and directories: " + ex.Message);
            }
        }

        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) return; // 确保有选中的项

            string filePath = (string)listView1.SelectedItems[0].Tag; // 获取文件路径

            if (File.Exists(filePath)) // 检查文件是否存在
            {
                if (Path.GetExtension(filePath).ToLower() == ".exe") // 如果是 exe 文件
                {
                    Process.Start(filePath); // 运行该文件
                }
                else if (Path.GetExtension(filePath).ToLower() == ".txt") // 如果是 txt 文件
                {
                    Process.Start("notepad.exe", filePath); // 用记事本打开该文件
                }
            }
            else if (Directory.Exists(filePath)) // 如果是文件夹
            {
                // 可以添加代码以打开文件夹
                MessageBox.Show("文件夹点击无反应。", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }


    }
}





